package util;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

public class PinyinUtil {
    /**
     *
     * @param src 获取拼音的字符串
     * @param fullSpell 是否是全拼, 比如针对 "未来" 这样的字符来说
     *                  如果第二个参数为 true, 得到 weilai 结果
     *                  第二个参数为 false, 得到 wl
     *                  针对多音字, 不做考虑 (一般第一个发音为常用发音)
     * @return
     */
    public static String get(String src, boolean fullSpell) {
        if (src == null || src.trim().length() == 0) {
            // null 字符串
            return null;
        }

        // 针对 Pinyin4j 配置, 让它输出 yu: 这个拼音, 能够使用 v 表示
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        format.setVCharType(HanyuPinyinVCharType.WITH_V);

        // 遍历每个字符, 针对每个字符分别进行转换, 把转换得到的拼音的结果, 拼接到 StringBuilder 里面
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < src.length(); i++) {
            char ch = src.charAt(i);
            // 针对单个字符进行转换
            String[] tmp = null;
            try {
                tmp = PinyinHelper.toHanyuPinyinStringArray(ch, format);
            } catch (BadHanyuPinyinOutputFormatCombination e) {
                e.printStackTrace();
            }
            if (tmp == null || tmp.length == 0) {
                // 如果结果是空的字符, 说明转换失败了
                // 如果输入的字符中没有汉语拼音, 就会转换失败
                // 保留原字符
                stringBuilder.append(src.charAt(i));
            } else if (fullSpell) {
                // 拼音结果非空, 获取完整全拼
                stringBuilder.append(tmp[0]);
            } else {
                // 拼音结果非空, 并且获取拼音首字母
                stringBuilder.append(tmp[0].charAt(0));
            }
        }
        return stringBuilder.toString();
    }
}
